package Comparable_etc;

import org.junit.Test;

import java.lang.reflect.Array;
import java.util.Arrays;
import java.util.Comparator;
import java.util.Random;

/**
 * @author Jimmy Zhan WORKSTATION
 * @date 2023/3/16 22:41
 * 说明：
 */

public class ComparatorTest {
    @Test
    public void test1(){
        Product[] arr = new Product[5];
        arr[0] = new Product("Huawei", 6299);
        arr[1] = new Product("Xiaomi", 4999);
        arr[2] = new Product("Vivo", 5999);
        arr[3] = new Product("Iphone", 9999);
        arr[4] = new Product("Honor", 6299);

        // 创建一个实现了Comparator接口的实现类的对象
        Comparator comparator = new Comparator() {
            // 如何判断两个对象o1, o2的大小，其标准就是此方法的方法体要编写的逻辑
            // 按照价格从低到高排序
            @Override
            public int compare(Object o1, Object o2) {
                if (o1 instanceof Product && o2 instanceof Product){
                    Product p1 = (Product) o1;
                    Product p2 = (Product) o2;

                    // 以价格对比，使用Double类下的compare()方法
//                    return -Double.compare(p1.getPrice(), p2.getPrice());
                    // 以名字对比，使用String类下的compareTo()方法
                    return p1.getName().compareTo(p2.getName());
                }
                throw new RuntimeException("类型不匹配");
            }
        };
        // 此处的comparator参数，传的是哪个比较器，就用哪个比较器，方便更换
        Arrays.sort(arr, comparator);
        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }

    @Test
    public void test2(){
        // String的升序排列，想要使用降序排列，无法修改String的源码，因此使用自定义的Comparator
        String[] arr = new String[]{"Tom", "Jerry", "Tony", "Rose", "Jack", "Lucy"};
        // 升序排列
        Arrays.sort(arr);

        Arrays.sort(arr, new Comparator() {
            @Override
            public int compare(Object o1, Object o2) {
                if (o1 instanceof String && o2 instanceof String){
                    String s1 = (String)o1;
                    String s2 = (String)o2;

                    return -s1.compareTo(s2);
                }
                throw new RuntimeException("类型不匹配");
            }
        });

        for (int i = 0; i < arr.length; i++) {
            System.out.println(arr[i]);
        }
    }
}
